'use strict'
const {BrowserWindow,Menu} = require('electron')
// 引入自动更新模块
const { autoUpdater } = require('electron-updater')
//更新状态码
const returnData = {
	error: { status: -1, msg: "检测更新异常" },
	checking: { status: 0, msg: "正在检查应用程序更新" },
	updateAva: { status: 1, msg: "检测到新版本，正在下载,请稍后" },
	updateNotAva: { status: 2, msg: "您现在使用的版本为最新版本,无需更新!" }
}
//更新窗口
let updateWin = null
//创建自动更新窗口
function createUpdateWin(autoUpdaterUrl,autoDownload = true) {
	Menu.setApplicationMenu(null);
	if(autoUpdaterUrl){
		autoUpdater.setFeedURL(autoUpdaterUrl)
		//检测到有更新是否自动下载
		autoUpdater.autoDownload=autoDownload
	}
	// 创建浏览器窗口。
	updateWin = new BrowserWindow({
		width: 500,//窗口宽度
		height: 300,//窗口高度
		webPreferences: {
			webSecurity: false,
			nodeIntegration: true,
			contextIsolation: false
		},
		alwaysOnTop: true,//是否置顶
		show: false,
		resizable:false,
		maximizable:false,
		closable:false
	})
	// 加载应用的 index.html，本地页面使用loadFile,互联网页面使用loadURL
	updateWin.loadURL(`${$baseUrl}/static/page/update/update.html`).then(r => console.log('更新页面已启动'))
	// 打开开发工具
	//updateWin.openDevTools()
	//更新窗口创建完毕
	updateWin.on('ready-to-show', () => {
		autoUpdater.checkForUpdates().then(r => console.log('开始更新检测'))
	})
}
//更新错误
autoUpdater.on("error", function (error) {
	sendUpdateMessage(returnData.error)
	updateWin.destroy()
})
//检查中
autoUpdater.on("checking-for-update", function () {
	sendUpdateMessage(returnData.checking)
})
//发现新版本
autoUpdater.on("update-available", function (info) {
	updateWin.show()
	sendUpdateMessage(JSON.stringify(info) + '___' + JSON.stringify(returnData.updateAva))
})
//当前版本为最新版本
autoUpdater.on("update-not-available", function (info) {
	setTimeout(function () {
		sendUpdateMessage(returnData.updateNotAva)
		updateWin.destroy()
	}, 1000)
})
// 更新下载进度事件
autoUpdater.on("download-progress", function (progressObj) {
	sendUpdateProcess(progressObj)
})
autoUpdater.on("update-downloaded", function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
	sendUpdateMessage("更新完毕")
	// 退出并安装(静默安装，自动启动)
	autoUpdater.quitAndInstall(true, true)
})

//提示更新信息
function sendUpdateMessage(text) {
	updateWin.webContents.send("autoUpdate", text)
}
//提示下载进度
function sendUpdateProcess(text) {
	updateWin.webContents.send("updateProcess", text)
}
module.exports = {createUpdateWin}